package com.mdp.sms.service;

import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import com.mdp.sms.tencent.client.SmsSenderUtil;
import com.mdp.core.entity.Tips;
import com.mdp.sms.api.SmsSenderService;
import org.json.JSONException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.ArrayList;
@Service
public class DefaultSmsSenderService implements SmsSenderService{
	 
	 @Value("${mdp.sms.appid:1}")
	int appid;
	 @Value("${mdp.sms.app-secret:}")
	String appkey;
     
	 
	
	SmsSenderUtil util = new SmsSenderUtil();
	
	



	/**
	 * 普通单发短信接口，明确指定内容，如果有多个签名，请在内容中以【】的方式添加到信息内容中，否则系统将使用默认签名
	 * @param type 短信类型，0 为普通短信，1 营销短信
	 * @param nationcode 国家码，如 86 为中国
	 * @param mobile 不带国家码的手机号
	 * @param msg 信息内容，必须与申请的模板格式一致，否则将返回错误
	 * @param extend 扩展码，可填空
	 * @param ext 服务端原样返回的参数，可填空
	 * @return {@link}Tips
	 * @throws Exception
	 */
	public Tips send(
			int type,
			String nationcode,
			String mobile,
			String msg,
			String extend,
			String ext) {
				/*
				请求包体
				{
				    "tel": {
				        "nationcode": "86", 
				        "mobile": "13788888888"
				    },
				    "type": 0, 
				    "msg": "你的验证码是1234", 
				    "sig": "fdba654e05bc0d15796713a1a1a2318c", 
				    "time": 1479888540,
				    "extend": "",
				    "ext": ""
				}
				应答包体
				{
				    "result": 0,
				    "errmsg": "OK", 
				    "ext": "", 
				    "sid": "xxxxxxx", 
				    "fee": 1
				}
				*/
		// 校验 type 类型
		Tips tips=new Tips("发送短信验证码成功");
		try {
			SmsSingleSender singleSender=new SmsSingleSender(appid, appkey);
			SmsSingleSenderResult result=singleSender.send(type, nationcode, mobile, msg, extend, ext);
			tips.put("ext", result.ext); 
			if(result.result!=0) {
				tips.setErrMsg(result.errMsg);
			}else {
				tips.setOkMsg(result.errMsg);
			}
			tips.put("tipscode", result.result);
			tips.put("fee", result.fee);
		} catch (JSONException | HTTPException | IOException e) {
			tips.setErrMsg(e.getMessage());
		}
		
		 
         return tips;
	}

	/**
	 * 指定模板单发
	 * @param nationcode 国家码，如 86 为中国
	 * @param mobile 不带国家码的手机号
	 * @param templId 信息内容
	 * @param sign 签名，如果填空，系统会使用默认签名
	 * @param extend 扩展码，可填空
	 * @param ext 服务端原样返回的参数，可填空
	 * @return {@link}Tips
	 */
	public Tips sendWithParam(
			String nationcode,
			String mobile,
			int templId,
			String validCode,
			String outTime,
			String sign,
			String extend,
			String ext) {
			
					/*
					请求包体
					{
					    "tel": {
					        "nationcode": "86", 
					        "mobile": "13788888888"
					    },
					    "type": 0, 
					    "msg": "你的验证码是1234", 
					    "sig": "fdba654e05bc0d15796713a1a1a2318c", 
					    "time": 1479888540,
					    "extend": "",
					    "ext": ""
					}
					应答包体
					{
					    "result": 0,
					    "errmsg": "OK", 
					    "ext": "", 
					    "sid": "xxxxxxx", 
					    "fee": 1
					}
					*/
			// 校验 type 类型
			Tips tips=new Tips("发送短信验证码成功");
			ArrayList<String> params=new ArrayList<>();
			 try {
				 SmsSingleSender singleSender=new SmsSingleSender(appid, appkey);
				 SmsSingleSenderResult result=singleSender.sendWithParam(nationcode, mobile, templId, params, sign, extend, ext);
				tips.put("ext", result.ext); 
				if(result.result!=0) {
					tips.setErrMsg(result.errMsg);
				}else {
					tips.setOkMsg(result.errMsg);
				}
				tips.put("tipscode", result.result);
				tips.put("fee", result.fee);
			} catch (JSONException | HTTPException | IOException e) {
				tips.setErrMsg(e.getMessage());
			}
			
			 return tips;
			
		}
}
